package com.ruoyi.system.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.SysDept;
import org.apache.ibatis.annotations.Select;

/**
 * 机构管理 数据层
 *
 * @author ruoyi
 */
public interface SysDeptMapper {
    /**
     * 查询机构人数
     *
     * @param dept 机构信息
     * @return 结果
     */
    public int selectDeptCount(SysDept dept);

    /**
     * 查询机构是否存在用户
     *
     * @param deptId 机构ID
     * @return 结果
     */
    public int checkDeptExistUser(Long deptId);

    /**
     * 查询机构管理数据
     *
     * @param dept 机构信息
     * @return 机构信息集合
     */
    public List<SysDept> selectDeptList(SysDept dept);


    /**
     * 查询医院管理数据
     *
     * @param dept 机构信息
     * @return 机构信息集合
     */
    List<SysDept> selectHospitalList(SysDept dept);

    /**
     * 删除机构管理信息
     *
     * @param deptId 机构ID
     * @return 结果
     */
    public int deleteDeptById(Long deptId);

    /**
     * 新增机构信息
     *
     * @param dept 机构信息
     * @return 结果
     */
    public int insertDept(SysDept dept);

    /**
     * 修改机构信息
     *
     * @param dept 机构信息
     * @return 结果
     */
    public int updateDept(SysDept dept);

    /**
     * 修改子元素关系
     *
     * @param depts 子元素
     * @return 结果
     */
    public int updateDeptChildren(@Param("depts") List<SysDept> depts);

    /**
     * 根据机构ID查询信息
     *
     * @param deptId 机构ID
     * @return 机构信息
     */
    public SysDept selectDeptById(Long deptId);

    /**
     * 校验机构名称是否唯一
     *
     * @param deptName 机构名称
     * @param parentId 父机构ID
     * @return 结果
     */
    public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);

    /**
     * 根据角色ID查询机构
     *
     * @param roleId 角色ID
     * @return 机构列表
     */
    public List<String> selectRoleDeptTree(Long roleId);


    /**
     * 根据机构ids查询机构
     *
     * @return 机构列表
     */
    List<String> selectDeptTreeByIds(@Param("regionList") List<String> regionList);

    /**
     * 修改所在机构的父级机构状态
     *
     * @param dept 机构
     */
    public void updateDeptStatus(SysDept dept);

    /**
     * 根据ID查询所有子机构
     *
     * @param deptId 机构ID
     * @return 机构列表
     */
    public List<SysDept> selectChildrenDeptById(Long deptId);

    /**
     * @param deptIds 科室id
     * @return
     * @author XiaoYi...
     * @date 2020/5/12 16:38
     */
    public List<SysDept> selectHospital(@Param("deptIds") Long deptIds);

    /**
     *
     * @param deptIds
     * @return
     */
    public List<SysDept> SYS_DEPT_LIST_All(@Param("deptIds") Long deptIds);

    /**
     * 报表模版机构列表
     * @param deptIds
     * @return
     */
    public List<SysDept> YF_REPORT_DEPT_LIST(@Param("deptIds") Long deptIds);


    /**
     * 获取本机构下未签署三方医废处理的医院机构
     *
     * @param deptIds 机构id
     * @return
     */
    public List<SysDept> selectMedicalWasteHospitals(@Param("currentDeptId") Long currentDeptId, @Param("deptIds") Long deptIds);


    /**
     * XiaoYi...
     * 查询医院列表
     *
     * @param districtsId 地区编号
     * @param hospList    查询区县地址类型列表
     */
    public List<SysDept> selectHospList(@Param("districtsId") Integer districtsId, @Param("hospList") String[] hospList);

    //  根据用户所在的deptId查询暂存点id
    List<Long> getStagingIdByHospitalId(Long hospitalId);

    /**
     * 获取当前机构
     *
     * @param deptid
     * @return
     */
    public SysDept selectCurrentDept(Long deptid);

    // 根据登录名(医院管理员)获取暂存点id（多个暂存点id用、隔开）
    List<SysDept> getStagingIdByLoginName(String loginName);

    //  根据机构id查询机构下医废数目
    int selectYFCountByDeptId(Long deptId);

    // 根据机构id查询机构下科室数目
    int selectKSCountByDeptId(Long deptId);

    // 根据地区查找对应的卫健局
    SysDept getWJJDeptBydisId(Long disId);

    /**
     * 根据id列表查询医院列表
     * @param hospitalIds 
     * @return
     */
    List<SysDept> selectHospitalsByIds(@Param("hospitalIds") List<Long> hospitalIds);


    List<Long> selectHospitalByComponyId(Long componyId);
    //查询所有未签约医院
    List<SysDept> selectHospitalAll();
    //查询所有处置公司
    List<SysDept> selectCzgs();
    //查询本机构和下属处置公司
    List<SysDept> selectCzgss(Long deptId);
}
